#include <iostream>
#include <functional>

using namespace std;
//内建函数对象:STL内建了一些函数对象
//分类:
//1、算术仿函数
//2、关系仿函数
//3、逻辑仿函数
//用法：
//1、这些仿函数所产生的对象，用法和一般函数完全相同
//2、使用内建函数对象，需要引入头文件#include<functional>

//算术仿函数
//功能描述：
//1、实现四则运算
//2、其中negate是一元运算，其他都是二元运算

//仿函数原型：
//1、template<class T> T plus<T>                 //加法仿函数
//2、template<class T> T minus<T>                //减法仿函数
//3、template<class T> T multiplies<T>           //乘法仿函数
//4、template<class T> T divides<T>              //除法仿函数
//5、template<class T> T modulus<T>              //取模仿函数
//6、template<class T> T negate<T>               //取反仿函数

//negate
void test1() {
    negate<int> n;
    cout << n(50) << endl;
}

//plus
void test2() {
    plus<int> p;
    cout << p(10, 20) << endl;
}

//minus
void test3() {
    minus<int> m;
    cout << m(20, 10) << endl;
}

//multiplies
void test4() {
    multiplies<int> m;
    cout << m(10, 20) << endl;
}

//divides
void test5() {
    divides<int> d;
    cout << d(20, 10) << endl;
}

//modulus
void test6() {
    modulus<int> m;
    cout << m(7, 2) << endl;
}

int main() {
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    return 0;
}